package com.yinhai.msg.email.tool;

import com.yinhai.ta404.core.exception.AppException;

import java.text.MessageFormat;

/**
 * 校验检查
 * 
 * 应用于Service有事务一层，当不满足要求时，直接抛出运行时异常回滚事务
 * 
 * @author huangyh@yinhai.com
 * 
 */
public class AssertUtil {

	/**
	 * @Description: 获取指定格式的消息内容
	 * @update: 2014年6月5日 by huangyh
	 * @param format
	 * @param arguments
	 * @return
	 */
	public static String getMessage(String format, Object... arguments) {
		if (ObjectUtil.isEmpty(format)) {
			return null;
		}
		return MessageFormat.format(format, arguments);
	}

	/**
	 * 判断表达式expression是否为True,如果为true则抛出异常
	 * 
	 * @param expression
	 * @param message
	 */
	public static void isTrue(boolean expression, String message) {
		if (expression) {
			throw new AppException(message);
		}
	}

	/**
	 * 判断表达式expression是否为False,如果为false则抛出异常
	 * 
	 * @param expression
	 * @param message
	 */
	public static void isFalse(boolean expression, String message) {
		if (!expression) {
			throw new AppException(message);
		}
	}

	/**
	 * @Description: 三元操作抛出异常
	 * @update: 2016年12月29日 by huangyh
	 * @param expression
	 * @param trueMessage
	 * @param falseMessage
	 */
	public static void ternary(boolean expression, String trueMessage, String falseMessage) {
		if (expression) {
			throw new AppException(trueMessage);
		} else {
			throw new AppException(falseMessage);
		}
	}

	/**
	 * 判断javabean的指定属性是否为空，如果为null则抛出异常
	 * 
	 * @param javabean
	 * @param attributeNames
	 */
	public static void isAttributeNull(Object javabean, String[] attributeNames) {
		try {
			JavaBeanUtil.checkJavaBean(javabean, attributeNames);
		} catch (Exception e) {
			//throw new IllegalArgumentException(e);
			throw new AppException(e.getMessage());
		}
	}

	/**
	 * 判断javabean的指定属性是否为空
	 * 
	 * @param javabean
	 * @param includeAttributeNames
	 * @param exceptAttributeNames
	 */
	public static void isAttributeNull(Object javabean, String[] includeAttributeNames, String[] exceptAttributeNames) {
		try {
			JavaBeanUtil.checkJavaBean(javabean, includeAttributeNames, exceptAttributeNames);
		} catch (Exception e) {
			//throw new IllegalArgumentException(e);
			throw new AppException(e.getMessage());
		}
	}

	/**
	 * 判断对象是否为空
	 * 
	 * @param obj
	 * @param message
	 */
	public static void isEmpty(Object obj, String message) {
		if (ObjectUtil.isEmpty(obj)) {
			//throw new IllegalArgumentException(message);
			throw new AppException(message);
		}
	}

}
